• Jump To … +
    zoo_frontend/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js zoo_frontend/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.js zoo_frontend/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.min.js zoo_frontend/node_modules/hoist-non-react-statics/src/index.js zoo_frontend/pages/_app.jsx zoo_frontend/pages/_document.jsx zoo_frontend/pages/admin/delivery-containers/index.js zoo_frontend/pages/admin/department/index.js zoo_frontend/pages/admin/group-diets/index.js zoo_frontend/pages/admin/species/index.js zoo_frontend/pages/admin/user/index.js zoo_frontend/pages/diet/edit.js zoo_frontend/pages/diet/index.js zoo_frontend/pages/diet/new.js zoo_frontend/pages/food/dataSrc.js zoo_frontend/pages/food/edit.js zoo_frontend/pages/food/index.js zoo_frontend/pages/food/new.js zoo_frontend/pages/food/nicknames.js zoo_frontend/pages/food/nutrDef.js zoo_frontend/pages/food/units.js zoo_frontend/pages/home/index.js zoo_frontend/pages/index.jsx zoo_frontend/pages/kitchen/index.js zoo_frontend/pages/kitchen/prep/index.js zoo_frontend/pages/login/index.js zoo_frontend/pages/nutritionist/index.js zoo_frontend/pages/print/bin-label.js zoo_frontend/pages/print/index.js zoo_frontend/pages/print/labels.js zoo_frontend/pages/print/prep-sheet.js zoo_frontend/pages/profile/index.js zoo_frontend/pages/reports/cost-by-gl-code.js zoo_frontend/pages/reports/dept-cards.js zoo_frontend/pages/reports/dept-keeper-cards.js zoo_frontend/pages/reports/feeding-cost.js zoo_frontend/pages/reports/index.js zoo_frontend/pages/reports/prep-cards-table.js zoo_frontend/src/api/Animals.js zoo_frontend/src/api/Api.js zoo_frontend/src/api/BudgetIds.js zoo_frontend/src/api/CaseNotes.js zoo_frontend/src/api/DataSrc.js zoo_frontend/src/api/DeliveryContainers.js zoo_frontend/src/api/Departments.js zoo_frontend/src/api/DietChanges.js zoo_frontend/src/api/DietHistory.js zoo_frontend/src/api/DietPlans.js zoo_frontend/src/api/Diets.js zoo_frontend/src/api/Food.js zoo_frontend/src/api/FoodCategories.js zoo_frontend/src/api/FoodPrepTables.js zoo_frontend/src/api/FoodWeights.js zoo_frontend/src/api/LifeStages.js zoo_frontend/src/api/Locations.js zoo_frontend/src/api/NutData.js zoo_frontend/src/api/NutrDef.js zoo_frontend/src/api/PrepNotes.js zoo_frontend/src/api/RoleMappings.js zoo_frontend/src/api/Roles.js zoo_frontend/src/api/Species.js zoo_frontend/src/api/Subenclosures.js zoo_frontend/src/api/Units.js zoo_frontend/src/api/Users.js zoo_frontend/src/api/index.js zoo_frontend/src/components/ConfirmationDialog.jsx zoo_frontend/src/components/ErrorPage.jsx zoo_frontend/src/components/FormCheckbox.jsx zoo_frontend/src/components/Header.jsx zoo_frontend/src/components/KitchenView.jsx zoo_frontend/src/components/Notifications.jsx zoo_frontend/src/components/PrintPrepSheets/PrepSheetPrintOut.jsx zoo_frontend/src/components/PrintPrepSheets/PrintPrepSheets.jsx zoo_frontend/src/components/PrintPrepSheets/index.js zoo_frontend/src/components/ReactSingleSelect.jsx zoo_frontend/src/components/SidebarDrawer.jsx zoo_frontend/src/components/VirtualTable.jsx zoo_frontend/src/components/index.js zoo_frontend/src/getPageContext.js zoo_frontend/src/pages/PageAccess.js zoo_frontend/src/pages/admin/deliveryContainers/deliveryContainers.jsx zoo_frontend/src/pages/admin/deliveryContainers/deliveryContainers.styles.js zoo_frontend/src/pages/admin/deliveryContainers/index.js zoo_frontend/src/pages/admin/department/department.jsx zoo_frontend/src/pages/admin/department/department.styles.js zoo_frontend/src/pages/admin/department/index.js zoo_frontend/src/pages/admin/groupDiets/groupDiets.jsx zoo_frontend/src/pages/admin/groupDiets/groupDiets.styles.js zoo_frontend/src/pages/admin/groupDiets/index.js zoo_frontend/src/pages/admin/species/index.js zoo_frontend/src/pages/admin/species/species.jsx zoo_frontend/src/pages/admin/species/species.styles.js zoo_frontend/src/pages/admin/user/index.js zoo_frontend/src/pages/admin/user/user.jsx zoo_frontend/src/pages/admin/user/user.styles.js zoo_frontend/src/pages/diet/CaseNotesForm.jsx zoo_frontend/src/pages/diet/CurrentDiet.jsx zoo_frontend/src/pages/diet/DietChangeCard.jsx zoo_frontend/src/pages/diet/DietHistory.jsx zoo_frontend/src/pages/diet/DietPlanChangeDialog.jsx zoo_frontend/src/pages/diet/DietSelectDialog.jsx zoo_frontend/src/pages/diet/diet.jsx zoo_frontend/src/pages/diet/diet.styles.js zoo_frontend/src/pages/diet/dietForm.jsx zoo_frontend/src/pages/diet/dietHistoryList.jsx zoo_frontend/src/pages/diet/edit/edit.jsx zoo_frontend/src/pages/diet/edit/edit.styles.js zoo_frontend/src/pages/diet/edit/index.js zoo_frontend/src/pages/diet/index.js zoo_frontend/src/pages/diet/new/index.js zoo_frontend/src/pages/diet/new/new.jsx zoo_frontend/src/pages/diet/new/new.styles.js zoo_frontend/src/pages/diet/prepNotesForm.jsx zoo_frontend/src/pages/food/dataSrc/dataSrc.jsx zoo_frontend/src/pages/food/dataSrc/dataSrc.styles.js zoo_frontend/src/pages/food/dataSrc/index.js zoo_frontend/src/pages/food/edit/FoodWeightTable.jsx zoo_frontend/src/pages/food/edit/edit.jsx zoo_frontend/src/pages/food/edit/edit.styles.js zoo_frontend/src/pages/food/edit/index.js zoo_frontend/src/pages/food/food.jsx zoo_frontend/src/pages/food/food.styles.js zoo_frontend/src/pages/food/foodForm.jsx zoo_frontend/src/pages/food/index.js zoo_frontend/src/pages/food/new/index.js zoo_frontend/src/pages/food/new/new.jsx zoo_frontend/src/pages/food/new/new.styles.js zoo_frontend/src/pages/food/nicknames/index.js zoo_frontend/src/pages/food/nicknames/nicknames.jsx zoo_frontend/src/pages/food/nicknames/nicknames.styles.js zoo_frontend/src/pages/food/nutrDef/index.js zoo_frontend/src/pages/food/nutrDef/nutrDef.jsx zoo_frontend/src/pages/food/nutrDef/nutrDef.styles.js zoo_frontend/src/pages/food/units/index.js zoo_frontend/src/pages/food/units/units.jsx zoo_frontend/src/pages/food/units/units.styles.js zoo_frontend/src/pages/home/home.jsx zoo_frontend/src/pages/home/home.styles.js zoo_frontend/src/pages/home/index.js zoo_frontend/src/pages/kitchen/index.js zoo_frontend/src/pages/kitchen/kitchenHome.jsx zoo_frontend/src/pages/kitchen/kitchenHome.styles.js zoo_frontend/src/pages/kitchen/prep/index.js zoo_frontend/src/pages/kitchen/prep/kitchen.jsx zoo_frontend/src/pages/kitchen/prep/kitchen.styles.js zoo_frontend/src/pages/login/index.js zoo_frontend/src/pages/login/login.jsx zoo_frontend/src/pages/login/login.styles.js zoo_frontend/src/pages/nutritionist/admin.jsx zoo_frontend/src/pages/nutritionist/admin.styles.js zoo_frontend/src/pages/nutritionist/index.js zoo_frontend/src/pages/print/admin.jsx zoo_frontend/src/pages/print/admin.styles.js zoo_frontend/src/pages/print/bin-label/admin.jsx zoo_frontend/src/pages/print/bin-label/admin.styles.js zoo_frontend/src/pages/print/bin-label/index.js zoo_frontend/src/pages/print/index.js zoo_frontend/src/pages/print/labels/admin.jsx zoo_frontend/src/pages/print/labels/admin.styles.js zoo_frontend/src/pages/print/labels/index.js zoo_frontend/src/pages/print/prep-sheet/admin.jsx zoo_frontend/src/pages/print/prep-sheet/admin.styles.js zoo_frontend/src/pages/print/prep-sheet/index.js zoo_frontend/src/pages/profile/index.js zoo_frontend/src/pages/profile/profile.jsx zoo_frontend/src/pages/profile/profile.styles.js zoo_frontend/src/pages/reports/admin.jsx zoo_frontend/src/pages/reports/admin.styles.js zoo_frontend/src/pages/reports/cost-by-gl-code/admin.jsx zoo_frontend/src/pages/reports/cost-by-gl-code/admin.styles.js zoo_frontend/src/pages/reports/cost-by-gl-code/index.js zoo_frontend/src/pages/reports/dept-cards/admin.jsx zoo_frontend/src/pages/reports/dept-cards/admin.styles.js zoo_frontend/src/pages/reports/dept-cards/index.js zoo_frontend/src/pages/reports/dept-keeper-cards/admin.jsx zoo_frontend/src/pages/reports/dept-keeper-cards/admin.styles.js zoo_frontend/src/pages/reports/dept-keeper-cards/index.js zoo_frontend/src/pages/reports/feeding-cost/admin.jsx zoo_frontend/src/pages/reports/feeding-cost/admin.styles.js zoo_frontend/src/pages/reports/feeding-cost/index.js zoo_frontend/src/pages/reports/index.js zoo_frontend/src/pages/reports/prep-cards-table/admin.jsx zoo_frontend/src/pages/reports/prep-cards-table/admin.styles.js zoo_frontend/src/pages/reports/prep-cards-table/index.js zoo_frontend/src/static/LocalStorage.js zoo_frontend/src/static/Roles.js zoo_frontend/src/util/AuthProvider.jsx zoo_frontend/src/util/PageLayout.jsx zoo_frontend/src/util/TableColumnHelper.js zoo_frontend/src/util/WithPropsChecker.jsx zoo_frontend/src/util/camelToNorm.js zoo_frontend/src/util/withAuth.jsx
  • SidebarDrawer.jsx

  • ¶
    import React, { useState, Fragment } from 'react';
    import PropTypes from 'prop-types';
    
    import { withStyles } from '@material-ui/core/styles';
    import Drawer from '@material-ui/core/Drawer';
    import List from '@material-ui/core/List';
    import Divider from '@material-ui/core/Divider';
    import IconButton from '@material-ui/core/IconButton';
    import ListItem from '@material-ui/core/ListItem';
    import ListItemIcon from '@material-ui/core/ListItemIcon';
    import ListItemText from '@material-ui/core/ListItemText';
    import Collapse from '@material-ui/core/Collapse';
    
    import AdminIcon from '@material-ui/icons/Security';
    import AssIcon from '@material-ui/icons/Assignment';
    import BookIcon from '@material-ui/icons/Book';
    import Chat from '@material-ui/icons/Chat';
    import ChevronLeftIcon from '@material-ui/icons/ChevronLeft';
    import ChevronRightIcon from '@material-ui/icons/ChevronRight';
    import DeliveryContainersIcon from '@material-ui/icons/ShoppingCart';
    import DepartmentIcon from '@material-ui/icons/Business';
    import DietIcon from '@material-ui/icons/FormatListBulleted';
    import ExpandLess from '@material-ui/icons/ExpandLess';
    import ExpandMore from '@material-ui/icons/ExpandMore';
    import FoodIcon from '@material-ui/icons/Restaurant';
    import HomeIcon from '@material-ui/icons/Home';
    import KitchenIcon from '@material-ui/icons/Kitchen';
    import ProfileIcon from '@material-ui/icons/AccountCircle';
    import SettingsIcon from '@material-ui/icons/Settings';
    import SpeciesIcon from '@material-ui/icons/Pets';
    import UsersIcon from '@material-ui/icons/SupervisorAccount';
    
    import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
    import {
      faRulerCombined,
      faCrow,
    } from '@fortawesome/free-solid-svg-icons';
    
    import Link from 'next/link';
    
    import { AuthContext } from '../util/AuthProvider';
    
    import {
      hasAccess,
      Home,
      Food,
      Diet,
      Admin,
      Profile,
      Kitchen,
    } from '../pages/PageAccess';
    
    const drawerWidth = 240;
    
    const styles = theme => ({
      drawer: {
        width: drawerWidth,
        flexShrink: 0,
      },
      drawerPaper: {
        width: drawerWidth,
      },
      drawerHeader: {
        display: 'flex',
        alignItems: 'center',
        padding: '0 8px',
        ...theme.mixins.toolbar,
        justifyContent: 'flex-end',
      },
      nested: {
        paddingLeft: theme.spacing.unit * 4,
      },
    });
    
    const SidebarDrawer = (props) => {
      const {
        classes, drawerOpen, theme, handleDrawerClose,
      } = props;
    
      const [adminCollapse, setAdminCollapse] = useState(false);
      const [foodCollapse, setFoodCollapse] = useState(false);
    
    
      return (
        <AuthContext.Consumer>
          {({ account: { role } }) => (
            <div>
              <Drawer
                className={classes.drawer}
                variant="persistent"
                anchor="left"
                open={drawerOpen}
                classes={{
                  paper: classes.drawerPaper,
                }}
              >
                <div className={classes.drawerHeader}>
                  <IconButton onClick={handleDrawerClose}>
                    {theme.direction === 'ltr' ? <ChevronLeftIcon /> : <ChevronRightIcon />}
                  </IconButton>
                </div>
                <Divider />
                <List disablePadding>
                  {hasAccess(role, Home.roles) &&
                    <Link href={Home.link}>
                      <ListItem button key="home" divider>
                        <ListItemIcon><HomeIcon /></ListItemIcon>
                        <ListItemText primary="Home" />
                      </ListItem>
                    </Link>
                  }
                  {hasAccess(role, Diet.roles) &&
                    <Link href={Diet.link}>
                      <ListItem button key="diet" divider>
                        <ListItemIcon><DietIcon /></ListItemIcon>
                        <ListItemText primary="Diets" />
                      </ListItem>
                    </Link>
                  }
                  {hasAccess(role, Kitchen.roles) &&
                    <Link href={Kitchen.link}>
                      <ListItem button key="kitchen" divider>
                        <ListItemIcon><KitchenIcon /></ListItemIcon>
                        <ListItemText primary="Kitchen" />
                      </ListItem>
                    </Link>
                  }
                  {hasAccess(role, Food.roles) &&
                    <Fragment>
                      <ListItem
                        button
                        key="foodMenu"
                        onClick={() => setFoodCollapse(!foodCollapse)}
                      >
                        <ListItemIcon><SettingsIcon /></ListItemIcon>
                        <ListItemText primary="Nutrition Setup" />
                        {foodCollapse ? <ExpandLess /> : <ExpandMore />}
                      </ListItem>
                      <Collapse in={foodCollapse} timeout="auto" unmountOnExit>
                        <List component="div" disablePadding>
                          {hasAccess(role, Food.roles) &&
                            <Link href={Food.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><FoodIcon /></ListItemIcon>
                                <ListItemText inset primary="Food" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Food.nutrDef.roles) &&
                            <Link href={Food.nutrDef.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><AssIcon /></ListItemIcon>
                                <ListItemText inset primary="Nutrient Definitions" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Food.dataSrc.roles) &&
                            <Link href={Food.dataSrc.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><BookIcon /></ListItemIcon>
                                <ListItemText inset primary="References" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Food.units.roles) &&
                            <Link href={Food.units.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon style={{ paddingLeft: '6px' }}><FontAwesomeIcon icon={faRulerCombined} /></ListItemIcon>
                                <ListItemText inset primary="Units" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Food.nicknames.roles) &&
                            <Link href={Food.nicknames.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><Chat /></ListItemIcon>
                                <ListItemText inset primary="Food Nicknames" />
                              </ListItem>
                            </Link>
                          }
                        </List>
                      </Collapse>
                      <Divider />
                    </Fragment>
                  }
                  {hasAccess(role, Admin.roles) &&
                    <Fragment>
                      <ListItem
                        button
                        key="admin"
                        onClick={() => setAdminCollapse(!adminCollapse)}
                      >
                        <ListItemIcon><AdminIcon /></ListItemIcon>
                        <ListItemText primary="Admin" />
                        {adminCollapse ? <ExpandLess /> : <ExpandMore />}
                      </ListItem>
                      <Collapse in={adminCollapse} timeout="auto" unmountOnExit>
                        <List component="div" disablePadding>
                          {hasAccess(role, Admin.deliveryContainers.roles) &&
                            <Link href={Admin.deliveryContainers.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><DeliveryContainersIcon /></ListItemIcon>
                                <ListItemText inset primary="Delivery Containers" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Admin.department.roles) &&
                            <Link href={Admin.department.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><DepartmentIcon /></ListItemIcon>
                                <ListItemText inset primary="Departments" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Admin.groupDiets.roles) &&
                            <Link href={Admin.groupDiets.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon style={{ marginLeft: -2.6 }}><FontAwesomeIcon icon={faCrow} size="lg" /></ListItemIcon>
                                <ListItemText inset primary="Group Diets" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Admin.species.roles) &&
                            <Link href={Admin.species.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><SpeciesIcon /></ListItemIcon>
                                <ListItemText inset primary="Species" />
                              </ListItem>
                            </Link>
                          }
                          {hasAccess(role, Admin.user.roles) &&
                            <Link href={Admin.user.link}>
                              <ListItem button className={classes.nested}>
                                <ListItemIcon><UsersIcon /></ListItemIcon>
                                <ListItemText inset primary="Users" />
                              </ListItem>
                            </Link>
                          }
                        </List>
                      </Collapse>
                      <Divider />
                    </Fragment>
                  }
                  {hasAccess(role, Profile.roles) &&
                    <Link href={Profile.link}>
                      <ListItem button key="profile" divider>
                        <ListItemIcon><ProfileIcon /></ListItemIcon>
                        <ListItemText primary="My Profile" />
                      </ListItem>
                    </Link>
                  }
                </List>
              </Drawer>
            </div>
          )}
        </AuthContext.Consumer>
      );
    };
    
    SidebarDrawer.propTypes = {
      classes: PropTypes.object.isRequired,
      theme: PropTypes.object.isRequired,
      drawerOpen: PropTypes.bool.isRequired,
      handleDrawerClose: PropTypes.func.isRequired,
    };
    
    export default withStyles(styles, { withTheme: true })(SidebarDrawer);